home *** CD-ROM | disk | FTP | other *** search
/ Gigarom 1 / Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso / FILES / DEV / C-H / CHexDmpDA.cpt / Hex Dump DA / chars.HexDumpDA.c < prev    next >
Text File  |  1988-06-14  |  2KB  |  119 lines

  1. /*
  2.  *    chars.HexDumpDA.c
  3.  *
  4.  */
  5.  
  6. extern long fileSize;
  7.  
  8. char *dp;
  9. char *countPtr;
  10.  
  11. AppendString(s)
  12. register char *s;
  13. {
  14.     register char i, len;
  15.     
  16.     *countPtr += (len = *s++);
  17.     for (i=0; i<len; i++) *dp++ = *s++;
  18. }
  19.  
  20. #define CharOf(c) ((((c)>=0x20)&&((c)<=0xCF))?(c):'.')
  21.  
  22. char hexChar[16] = {'0','1','2','3','4','5','6','7',
  23.                     '8','9','A','B','C','D','E','F'};
  24.  
  25. DrawHex6(i)
  26. register unsigned long i;
  27. {
  28.     register int mod = 20;
  29.     register int j;
  30.     register unsigned long mask = 0x000FFFFF;
  31.     
  32.     for (j=6;j>0; --j) {
  33.         (*countPtr)++;
  34.         *dp++ = (hexChar[i>>mod]);
  35.         mod -= 4;
  36.         i &= mask;
  37.         mask >>= 4;
  38.     }
  39. }
  40.  
  41. DrawHex4(i)
  42. register unsigned int i;
  43. {
  44.     register int mod = 12;
  45.     register int j;
  46.     register unsigned int mask = 0x0FFF;
  47.     
  48.     for (j=4;j>0; --j) {
  49.         (*countPtr)++; 
  50.         *dp++ = hexChar[i>>mod];
  51.         mod -= 4;
  52.         i &= mask;
  53.         mask >>= 4;
  54.     }
  55. }
  56.  
  57. Four_Blanks()
  58. {
  59.     (*countPtr) += 4;
  60.     *dp++ = ' ';
  61.     *dp++ = ' ';
  62.     *dp++ = ' ';
  63.     *dp++ = ' ';
  64. }
  65.  
  66. Fill_Line(i, cptr, display)
  67. long i;
  68. register char     *cptr;
  69. char    *display;
  70. {
  71.     register int     k;
  72.     register int    *ptr;
  73.     register char    c;
  74.     register long    n;
  75.  
  76.     ptr = (int *)cptr;
  77.     
  78.     dp = countPtr = display;
  79.     *dp++=0;
  80.     
  81.     n = i;
  82.     if (n >= fileSize) return;
  83.     
  84.     DrawHex6(i);
  85.     
  86.     AppendString("\p:  ");
  87.     for (k=0;k<4;k++) {
  88.         if (n>=fileSize)
  89.             Four_Blanks();
  90.         else
  91.             DrawHex4(*ptr++);
  92.         n += 2;
  93.         (*countPtr)++;
  94.         *dp++ = ' ';
  95.     }
  96.     
  97.     (*countPtr)++;
  98.     *dp++ = ' ';
  99.     for (k=0;k<4;k++) {
  100.         if (n>=fileSize)
  101.             Four_Blanks();
  102.         else
  103.             DrawHex4(*ptr++);
  104.         n += 2;
  105.         (*countPtr)++;
  106.         *dp++ = ' ';
  107.     }
  108.     AppendString("\p  ");
  109.  
  110.     n = i;
  111.     for (k=0; k<16; k++) {
  112.         c = *cptr++;
  113.         if (++n>fileSize) return;
  114.         (*countPtr)++;
  115.         *dp++ = CharOf(c);
  116.     }
  117. }
  118.  
  119.